using System;
using System.Collections.Generic;

namespace OffsetPath
{
    public class SkeletroBaseLineaClasseI : ForseLineaClassA
    {
        private LinkedList<ClassL> a;
        private List<ClassAa_OssaSkeletro> b;
        private int? c;
        private SkeletroBaseLineaClasseI d;
        private SkeletroBaseLineaClasseI e;
        private List<ClassAa_OssaSkeletro> f;
        private ForseLineaClassA g;
        private ClassF h;
        private ClassAa_OssaSkeletro i;
        private ClassAa_OssaSkeletro j;

        public SkeletroBaseLineaClasseI(ForseLineaClassA classA0)
            : base(classA0)
        {
            this.b = new List<ClassAa_OssaSkeletro>();
            this.c = null;
            this.f = new List<ClassAa_OssaSkeletro>();
        }

        public SkeletroBaseLineaClasseI(PuntoDueD A_0, PuntoDueD A_1)
            : base(A_0, A_1)
        {
            this.b = new List<ClassAa_OssaSkeletro>();
            this.c = null;
            this.f = new List<ClassAa_OssaSkeletro>();
        }

        public void MethodA(ForseLineaClassA classA0)
        {
            this.g = classA0;
        }

        public void MethodA(ClassAa_OssaSkeletro A_0)
        {
            this.j = A_0;
        }

        public void MethodA(ClassF A_0)
        {
            if ((this.h != null) && (this.h != A_0))
            {
                throw new InvalidOperationException();
            }
            this.h = A_0;
        }

        public void MethodA(SkeletroBaseLineaClasseI A_0)
        {
            this.e = A_0;
        }

        public void MethodA(ClassL A_0)
        {
            if ((A_0 == null) || (A_0.MethodA() != this))
            {
                throw new ArgumentException();
            }
            if (this.a == null)
            {
                this.a = new LinkedList<ClassL>();
            }
            this.a.AddLast(A_0);
        }

        public ClassAa_OssaSkeletro MethodA(int A_0)
        {
            return this.f[A_0];
        }

        public ClassAa_OssaSkeletro MethodB()
        {
            return this.i;
        }

        public void MethodB(ClassAa_OssaSkeletro A_0)
        {
            if (A_0.MethodS() != null)
            {
                throw new InvalidOperationException();
            }
            this.b.Remove(A_0);
        }

        public void MethodB(SkeletroBaseLineaClasseI A_0)
        {
            this.d = A_0;
        }

        public ClassAa_OssaSkeletro MethodB(int A_0)
        {
            return this.b[A_0];
        }

        public ClassF MethodC()
        {
            return this.h;
        }

        public void MethodC(ClassAa_OssaSkeletro A_0)
        {
            if (A_0.MethodS() == null)
            {
                throw new InvalidOperationException();
            }
            this.b.Add(A_0);
        }

        public IEnumerable<ClassAa_OssaSkeletro> MethodD()
        {
            return this.b;
        }

        public void MethodD(ClassAa_OssaSkeletro A_0)
        {
            this.f.Add(A_0);
        }

        public ClassAa_OssaSkeletro MethodE()
        {
            return this.j;
        }

        public void MethodE(ClassAa_OssaSkeletro A_0)
        {
            this.i = A_0;
        }

        public SkeletroBaseLineaClasseI MethodF()
        {
            return this.e;
        }

        public override int GetHashCode()
        {
            if (!this.c.HasValue)
            {
                this.c = new int?(Guid.NewGuid().GetHashCode());
            }
            return this.c.Value;
        }

        public int MethodJ()
        {
            return this.f.Count;
        }

        public SkeletroBaseLineaClasseI k()
        {
            return this.d;
        }

        public int l()
        {
            return this.b.Count;
        }

        public ForseLineaClassA n()
        {
            return this.g;
        }

        public IEnumerable<ClassL> o()
        {
            return this.a;
        }
    }

}